package com.colabo.j2ee.web.oaf.security;

import java.util.List;
import java.util.Map;

import com.colabo.j2ee.web.core.exception.ServiceException;

/**
 * 安全策略组服务接口
 */
public interface ISecurityStrategyGroupService {
	public static final String BEAN_ID = "securityStrategyGroupService";

	/**
	 * 得到查询策略组名称分页列表（排除冗余信息）
	 *
	 * @param aPageSize
	 * 				每页记录数，从数据库中查出相应数量的记录
	 * @return 对象数组，有两个对象，第一个对象为查询记录的<code>List</code>集合对象，第二个为数据库中总记录数
	 * @throws ServiceException
	 */
	public Object[] initData(int aPageSize) throws ServiceException;

	/**
	 * 批量更新安全策略组数据
	 * 
	 * @param aObjectList
	 * 				对象列表，有三个值，删除<code>bean</code>列表、更新<code>bean</code>的列表、新增<code>bean</code>的列表
	 * @return 整数对象数组，操作成功受影响的记录数，有三个值，插入成功的记录数、更新成功的记录数、删除成功的记录数
	 * @throws ServiceException
	 */
	public Integer[] saveData(Map aObjectList) throws ServiceException;
	

	/**
	 * 批量更新安全策略组明细数据
	 * 
	 * @param aObjectList
	 * 				对象列表，有三个值，删除<code>bean</code>列表、更新<code>bean</code>的列表、新增<code>bean</code>的列表
	 * @return 整数对象数组，操作成功受影响的记录数，有三个值，插入成功的记录数、更新成功的记录数、删除成功的记录数
	 * @throws ServiceException
	 */
	public Integer[] saveDetailData(Map aObjectList) throws ServiceException;
	

	/**
	 * 批量更新安全策略组关联岗位数据
	 * 
	 * @param aObjectList
	 * 				对象列表，有三个值，删除<code>bean</code>列表、更新<code>bean</code>的列表、新增<code>bean</code>的列表
	 * @param groupname
	 * 				策略组名称
	 * @return 整数对象数组，操作成功受影响的记录数，有三个值，插入成功的记录数、更新成功的记录数、删除成功的记录数
	 * @throws ServiceException
	 */
	public Integer[] savePosiData(Map aObjectList,String groupname) throws ServiceException;

	/**
	 * 条件查询，根据传入的条件，进行数据查询，查询安全策略组名称
	 * 
	 * @param aParams
	 * 				查询条件集合
	 * @param aOffset
	 * 				记录开始位置
	 * @param aPageSize
	 * 				查询记录条数
	 * @return 对象数组，有两个对象，第一个对象为查询记录的<code>List</code>集合对象，第二个为数据库中符合查询条件的总记录数
	 * @throws ServiceException
	 */
	public Object[] queryData(Map aParams, int aOffset, int aPageSize)
			throws ServiceException;
	
	/**
	 * 将所有安全策略查询出来汇总成一个对比表格
	 * @return 
	 * @throws ServiceException
	 */
	public List queryForStrategyMatrix() throws ServiceException;
	/**
	 * 条件查询，根据传入的条件，进行数据查询，查询安全策略组明细
	 * 
	 * @param aParams
	 * 				查询条件集合
	 * @param aOffset
	 * 				记录开始位置
	 * @param aPageSize
	 * 				查询记录条数
	 * @return 对象数组，有两个对象，第一个对象为查询记录的<code>List</code>集合对象，第二个为数据库中符合查询条件的总记录数
	 * @throws ServiceException
	 */
	public Object[] queryDetailData(Map aParams, int aOffset) 
			throws ServiceException;
	
	/**
	 * 条件查询，根据传入的条件，进行数据查询，查询安全策略组关联岗位
	 * 
	 * @param aParams
	 * 				查询条件集合
	 * @param aOffset
	 * 				记录开始位置
	 * @param aPageSize
	 * 				查询记录条数
	 * @return 对象数组，有两个对象，第一个对象为查询记录的<code>List</code>集合对象，第二个为数据库中符合查询条件的总记录数
	 * @throws ServiceException
	 */
	public Object[] queryPosiData(Map aParams, int aOffset, int aPageSize, String type) 
			throws ServiceException;
	

	/**
	 * 获取安全策略组下存在的对应岗位关系个数
	 * @param groupName
	 * 					策略组名称
	 * @return 存在对应岗位关系的个数
	 * @throws ServiceException
	 */
	public int isContainsPosi(String groupName) throws ServiceException;
	
	/**
	 * 批量更新安全策略组关联角色数据
	 * 
	 * @param aObjectList
	 * 				对象列表，有三个值，删除<code>bean</code>列表、更新<code>bean</code>的列表、新增<code>bean</code>的列表
	 * @param groupname
	 * 				策略组名称
	 * @return 整数对象数组，操作成功受影响的记录数，有三个值，插入成功的记录数、更新成功的记录数、删除成功的记录数
	 * @throws ServiceException
	 */
	public Integer[] saveRoleData(Map aObjectList,String groupname) throws ServiceException;
	
	/**
	 * 判断策略组下是否存在未配置策略值的项
	 * @param groupName
	 * @return true：存在未配置策略值的项，false：不存在未配置策略值的项
	 * @throws ServiceException
	 */
	public boolean isHasStategyWithNoValue(String groupName) throws ServiceException;
	
	/**
	 * 设置指定的组为默认
	 * @param groupName
	 * @throws ServiceException
	 */
	public void setDefalutGroup(String groupName)throws ServiceException;
	
	/**
	 * 根据参数获取系统安全策略值
	 * @param extFlag 1：策略组中可配置，0：只有系统可配置
	 * @return
	 * @throws ServiceException
	 */
	public List getAllStrategies(String extFlag) throws ServiceException;
	
	/**
	 * 根据策略名称得到策略值
	 * 
	 * @param strategyName
	 * @return 策略值
	 */
	public String getStrategyValue(String strategyName);
}
